#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File Name: 用于启动的主模块_PyMailGui.py
@Author: LTisme
@Date: 2021/8/29 13:59
# -----------------------------------------------------------------------------------------------------
@Description: 
一个基于tkinter的GUI接口客户端，用于发送和接收电子邮件

这个文件哟关于实现顶层窗口和接口。PyMailGUI使用的许多模块独立于这个GUI，但能执行相关任务。

==编写在别处，而在此处复用的模块：==

mailtools (package)
    client-side scripting chapter
    服务器发送与接收，解析，撰写               (Example 13-21+)
threadtools.py
    GUI tools chapter
    GUI回调的线程队列管理                    (Example 10-20)
windows.py
    GUI tools chapter
    顶层窗口的边界配置                       (Example 10-16)
textEditor.py
    GUI programs chapter
    邮件查看窗口和一些弹出窗口里的文本组件       (Example 11-4)

==此处定义的通用模块：==

popuputil.py
    help and busy windows, for general use
messagecache.py
    缓存，用于追踪已加载的邮件
wraplines.py
    工具脚本，用于为邮件中长文本行换行
html2text.py
    基本的HTML解析器，用于提纯文本
mailconfig.py
    用户配置参数：服务器名称，字体等等

==此处定义的程序专用模块：==

SharedNames.py
    窗口类和主文件的共享对象
ViewWindows.py
    实现查看、撰写、回复和转发窗口
ListWindows.py
    实现邮件服务器和本地文件列表窗口
PyMailGuiHelp.py (see also PyMailGuiHelp.html)
    向用户展示的帮助文本，通过主窗口帮助栏打开
# -----------------------------------------------------------------------------------------------------
"""
from . import PyMailGui专用邮件配置模块_mailconfig as mailconfig
from .程序范围内的全局对象_SharedNames import appname, windows
from .邮件列表窗口_ListWindows import PyMailServer, PyMailFile

######################################################################################
# 顶层窗口类
# View、Write、Reply、Forward、Help和BusyBox均直接继承PopupWindow：这是其唯一用途；
# askpassword类里的某些默认方案，如destroy和okayToExit：必须采用最左有限；
# 如果想将PyMailFileWindow作为独立程序运行，可参照PyMailCommon.onOpenMailFile里的逻辑；
######################################################################################

# 在cwd里使用图标文件，或在工具目录下使用默认文件
servername = mailconfig.popservername or 'Server'


class PyMailServerWindow(PyMailServer, windows.MainWindow):
    """一个Tk类，附加了一些协议及整合在其中的办法"""
    def __init__(self):
        windows.MainWindow.__init__(self, appname, servername)          # 这里配置了主窗口的图标，title等信息
        PyMailServer.__init__(self)


class PyMailServerPopup(PyMailServer, windows.PopupWindow):
    """一个Toplevel类，附加了一些协议及整合在其中的办法"""
    def __init__(self):
        windows.PopupWindow.__init__(self, appname, servername)
        PyMailServer.__init__(self)


class PyMailServerComponent(PyMailServer, windows.ComponentWindow):
    """一个Frame类，附加了一些协议及整合在其中的办法"""
    def __init__(self):
        windows.ComponentWindow.__init__(self)
        PyMailServer.__init__(self)


class PyMailFileWindow(PyMailFile, windows.PopupWindow):
    """一个Toplevel类，附加了一些协议及整合在其中的办法"""
    def __init__(self, filename):
        windows.PopupWindow.__init__(self, appname, filename)
        PyMailFile.__init__(self, filename)
